Fric-frac EventController.php
Home

Fric-frac EventController.php

Fric-frac EventController.php

Per entiteit maken we controllerklasse. We volgen hier ook de gewoonte die in ASP.NET MVC gevolgd wordt. We beginnen met de EventController klasse.
  1. De EventController klasse

    <?php
    /**
    * Created by ModernWays
    * User: Jef Inghelbrecht
    * Date: 15/04/2019
    * Time: 09:17
    */
    namespace ModernWays\Controllers;

    class EventController extends \ModernWays\Controller
    {

    ...
    }

  2. Het model
    1. We zouden een klasse voor het model kunnen gebruiken en misschien doen we dat wel eens. Maar voorlopig houden we het bij een associatieve array. Die heeft de naam $model en we declaren die als een private field in de klasse:
          private $model = array('tableName' => 'Event',
                  'error' => 'Geen',
                  'row' => null,
                  'list' => null,
                  'listEventCategory' => null,
                  'listEventTopic' => null);
      We maken een public getter om het model te retourneren:
      public function getModel() {
          return $this->model;
      }
  3. Helpers-methoden
    Helpersmethoden worden door de CRUD-actiemethoden van deze klasse gebruikt.
    1. readAll
      /**
       * helper function for this controller
       * read all rows from Event table and stores them in $this->model
       * @return void
       */
      public function readAll() {
          $this->model['list'] = \ModernWays\Dal::readAll('Event');
          if ($this->model['list'] ) {
              $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen";
          } else {
              $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!";
              $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage();
          }
      }
    2. readAllEventCategory
      Om de keuzelijst van EventCateory te vullen hebben we een methode nodig die alle rijen uit de tabel EventCategory inleest:
      /**
       * helper function for this controller
       * read all rows from EventCategory table
       * @return void
       */
      public function readAllEventCategory() {
          $this->model['listEventCategory'] = \ModernWays\Dal::readAll('EventCategory');
          if ($this->model['listEventCategory'] ) {
              $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen";
          } else {
              $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!";
              $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage();
          }
      }
    3. readAllEventTopic
      Om de keuzelijst EventTopic te kunnen vullen in de views maken we een helpersfunctie die alle rijen van de EventTopic tabel inleest:
      /**
       * helper function for this controller
       * read all rows from EventTopic table
       * @return void
       */
      public function readAllEventTopic() {
          $this->model['listEventTopic'] = \ModernWays\Dal::readAll('EventTopic');
          if ($this->model['listEventTopic'] ) {
              $this->model['message'] = "Rij uit {$this->model[tableName]} ingelezen";
          } else {
              $this->model['message'] = "Geen rijen uit {$this->model[tableName]} ingelezen!";
              $this->model['error'] = 'Dal message: ' . \ModernWays\Dal::getMessage();
          }
      }
  4. index methode
    Deze methode toont de start view voor de CRUD bewerkingen op de Eventtabel.
    1. Code
      /**
       * actionmethode Event/index
       * updates het model
       * creëert en retourneert de Event/Index view methode
       * @return view()
       */
      public function index() {
          // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#editing
          // voor het model hebben we een lijst van events en de tabelnaam nodig
          $this->readAll();
          // view heeft dezelfde naam als de actiemethode dus
          // hoeven we die niet als argument mee te geven
          return $this->view($this->model);
      }
      
    2. Test
      Om de view te testen klik je op de Event tegel in de Admin/index view. Dit is het resultaat:
      Fric-frac View Event-Index
      Fric-frac View Event-Index
  5. insertingOne
    Deze methode toont een formulier met velden waarin de gebruiker de gegevens voor een nieuwe Event kan intypen.
    1. Deze methode insert dus geen rij in de Event tabel!
    2. Rechts wordt de lijst van de rijen en de Eventtabel getoond. We moeten dus alle rijen van Event inlezen.
    3. De keuzelijsten voor EventCategory en EventTopic moeten gevuld worden. Daarvoor lezen we de rijen van de respectievelijke tabellen in.
    4. Code:
      /**
       * actionmethode Event/insertingOne
       * updates het model
       * Toont een forumulier met input velden voor het intypen van
       * de gegevens voor een nieuwe Event.
       * Retourneert de Views/Event/InsertingOne view methode
       * @return view()
       */
      public function insertingOne() {
          // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#insertingOne
          // voor het model hebben we een lijst van events en de tabelnaam nodig
          $this->readAll();
          // Een lijst van de rijen uit EventCategory om de dropdown te vullen
          $this->readAllEventCategory();
           // Een lijst van de rijen uit EventCategory om de dropdown te vullen
          $this->readAllEventTopic();
         // view heeft dezelfde naam als de actiemethode dus
          // hoeven we die niet als argument mee te geven
          return $this->view($this->model);
      }
    5. Test
      Om de view te testen klik je op de Plusknop in de EventTopic/index view. Dit is het resultaat:
      Fric-frac View Event-InsertingOne
      Fric-frac View Event-InsertingOne
  6. createOne
    1. Met deze CRUD methode worden de gegevens die in het formulier zijn ingetypt in de database geïnserted. Deze methode wordt opgeroepen door op het disk-icoontje in de Event/InsertingOne view te klikken. Na het toevoegen keer je terug naar de Event/Index view en wordt de nieuw toegevoegde rij in de lijst rechts getoond.
    2. De de waarden uit de $_POST array worden in de DAL opgeschoond met behulp van de htmlspecialchars methode.
    3. In het model word de starttijd en eindtijd samengesteld. Die bestaat uit de datum en de tijd.
    4. Vooraleer de Event/Index view op te roepen worden alle rijen uit de Event tabel opnieuw ingelezen.
    5. Code
      public function createOne() {
          // we kunnen de post array niet zomaar doorgeven
          // start- en eindtijd moeten berekend worden,
          // namelijk datum + uur
          $newEntity = array(
              'Name' => $_POST['Name'],
              'Location' => $_POST['Location'],
              'Starts' => $_POST['StartDate'] . ' ' . $_POST['StartTime'],
              'Ends' => $_POST['EndDate'] . ' ' . $_POST['EndTime'],
              'Image' => $_POST['Image'],
              'Description' => $_POST['Description'],
              'OrganiserName' => $_POST['OrganiserName'],
              'OrganiserDescription' => $_POST['OrganiserDescription'],
              'EventCategoryId' => $_POST['EventCategoryId'],
              'EventTopicId' => $_POST['EventTopicId']
          );
          // var_dump($newEntity);
          // return;
         if (\ModernWays\Dal::create('Event', $newEntity, 'Name')) {
              $model['message'] = "Rij toegevoegd! {$newEntity['Name']} is toegevoegd aan Event";
          } else {
              $model['message'] = "Oeps er is iets fout gelopen! Kan {$newEntity['Name']} niet toevoegen aan Event";
              $model['error'] = \ModernWays\Dal::getMessage();
          }
          // Lees alle rijen opnieuw in om de tabel in Index view rechts
          // te kunnen vullen
          $this->readAll();
          // view heeft een andere naam als de actiemethode dus
          // moeten we die als argument mee te geven
          return $this->view($model, 'Views/Event/Index.php');
      }
    6. Test
      Klik op disk-icoontje in de Event/InsertingOne view om de rij aan de Eventtabel toe te voegen.
  7. readingOne
    1. Met deze methode halen we een rij op uit de Event tabel en laden de Event/ReadingOne view. Deze methode wordt opgeroepen wanneer de gebruiker op het pijl-icoontje drukt in de lijst rechts op scherm van alle Events.
    2. We lezen alle rijen EventCategory en EventTopic in omdat we de namen van de categorieën en topics moeten opzoeken.
    3. Code:
      /**
       * actionmethode Event/readingOne
       * updates het model, leest een rij en alle rijen in
       * Toont een view met de gegevens van 1 rij en rechts een lijst
       * van alle rijen
       * Retourneert de Views/Event/ReadingOne view methode
       * @return view()
       */
      public function readingOne() {
          // wireframe: https://www.modernways.be/myap/it/project/fric-frac/Fric-frac%20Wireframes%20Person.html#readingOne
          // de $paramterValue werd ingesteld met de static dispatch methode
          // en is zelf static. Dat wil zeggen deze waarde behoort tot
          // de klasse en niet tot het object of de instantie
          $id = self::$parameterValue;
          $this->model['row'] = \ModernWays\Dal::readOne('Event', $id);
          $this->readAll();
          // Een lijst van de rijen uit EventCategory om de naam op te zoeken
          $this->readAllEventCategory();
           // Een lijst van de rijen uit EventCategory om de de naam op te zoeken
          $this->readAllEventTopic();
          
          foreach($this->model['listEventCategory'] as $item) {
              if ($item['Id'] == $this->model['row']['EventCategoryId']) {
                  $this->model['row']['EventCategoryName'] =  $item['Name'];
                  break;
              }
          }
           foreach($this->model['listEventTopic'] as $item) {
              if ($item['Id'] == $this->model['row']['EventTopicId']) {
                  $this->model['row']['EventTopicName'] =  $item['Name'];
                  break;
              }
          }
          // var_dump($this->model['listEventCategory']);
          // view heeft dezelfde naam als de actiemethode dus
          // hoeven we die niet als argument mee te geven
          return $this->view($this->model);
      }
    4. Resultaat:
      Fric-frac View Event-ReadingOne
      Fric-frac View Event-ReadingOne

JI
2019-04-16 16:47:46